//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension AuditManager {
    // MARK: Enums

    public enum AccountStatus: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case inactive = "INACTIVE"
        case pendingActivation = "PENDING_ACTIVATION"
        public var description: String { return self.rawValue }
    }

    public enum ActionEnum: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case create = "CREATE"
        case delete = "DELETE"
        case importEvidence = "IMPORT_EVIDENCE"
        case inactive = "INACTIVE"
        case reviewed = "REVIEWED"
        case underReview = "UNDER_REVIEW"
        case updateMetadata = "UPDATE_METADATA"
        public var description: String { return self.rawValue }
    }

    public enum AssessmentReportDestinationType: String, CustomStringConvertible, Codable {
        case s3 = "S3"
        public var description: String { return self.rawValue }
    }

    public enum AssessmentReportStatus: String, CustomStringConvertible, Codable {
        case complete = "COMPLETE"
        case failed = "FAILED"
        case inProgress = "IN_PROGRESS"
        public var description: String { return self.rawValue }
    }

    public enum AssessmentStatus: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case inactive = "INACTIVE"
        public var description: String { return self.rawValue }
    }

    public enum ControlResponse: String, CustomStringConvertible, Codable {
        case automate = "AUTOMATE"
        case `defer` = "DEFER"
        case ignore = "IGNORE"
        case manual = "MANUAL"
        public var description: String { return self.rawValue }
    }

    public enum ControlSetStatus: String, CustomStringConvertible, Codable {
        case active = "ACTIVE"
        case reviewed = "REVIEWED"
        case underReview = "UNDER_REVIEW"
        public var description: String { return self.rawValue }
    }

    public enum ControlStatus: String, CustomStringConvertible, Codable {
        case inactive = "INACTIVE"
        case reviewed = "REVIEWED"
        case underReview = "UNDER_REVIEW"
        public var description: String { return self.rawValue }
    }

    public enum ControlType: String, CustomStringConvertible, Codable {
        case custom = "Custom"
        case standard = "Standard"
        public var description: String { return self.rawValue }
    }

    public enum DelegationStatus: String, CustomStringConvertible, Codable {
        case complete = "COMPLETE"
        case inProgress = "IN_PROGRESS"
        case underReview = "UNDER_REVIEW"
        public var description: String { return self.rawValue }
    }

    public enum FrameworkType: String, CustomStringConvertible, Codable {
        case custom = "Custom"
        case standard = "Standard"
        public var description: String { return self.rawValue }
    }

    public enum KeywordInputType: String, CustomStringConvertible, Codable {
        case selectFromList = "SELECT_FROM_LIST"
        public var description: String { return self.rawValue }
    }

    public enum ObjectTypeEnum: String, CustomStringConvertible, Codable {
        case assessment = "ASSESSMENT"
        case assessmentReport = "ASSESSMENT_REPORT"
        case control = "CONTROL"
        case controlSet = "CONTROL_SET"
        case delegation = "DELEGATION"
        public var description: String { return self.rawValue }
    }

    public enum RoleType: String, CustomStringConvertible, Codable {
        case processOwner = "PROCESS_OWNER"
        case resourceOwner = "RESOURCE_OWNER"
        public var description: String { return self.rawValue }
    }

    public enum SettingAttribute: String, CustomStringConvertible, Codable {
        case all = "ALL"
        case defaultAssessmentReportsDestination = "DEFAULT_ASSESSMENT_REPORTS_DESTINATION"
        case defaultProcessOwners = "DEFAULT_PROCESS_OWNERS"
        case isAwsOrgEnabled = "IS_AWS_ORG_ENABLED"
        case snsTopic = "SNS_TOPIC"
        public var description: String { return self.rawValue }
    }

    public enum SourceFrequency: String, CustomStringConvertible, Codable {
        case daily = "DAILY"
        case monthly = "MONTHLY"
        case weekly = "WEEKLY"
        public var description: String { return self.rawValue }
    }

    public enum SourceSetUpOption: String, CustomStringConvertible, Codable {
        case proceduralControlsMapping = "Procedural_Controls_Mapping"
        case systemControlsMapping = "System_Controls_Mapping"
        public var description: String { return self.rawValue }
    }

    public enum SourceType: String, CustomStringConvertible, Codable {
        case awsApiCall = "AWS_API_Call"
        case awsCloudtrail = "AWS_Cloudtrail"
        case awsConfig = "AWS_Config"
        case awsSecurityHub = "AWS_Security_Hub"
        case manual = "MANUAL"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AWSAccount: AWSEncodableShape & AWSDecodableShape {
        ///  The email address associated with the specified AWS account.
        public let emailAddress: String?
        ///  The identifier for the specified AWS account.
        public let id: String?
        ///  The name of the specified AWS account.
        public let name: String?

        public init(emailAddress: String? = nil, id: String? = nil, name: String? = nil) {
            self.emailAddress = emailAddress
            self.id = id
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.emailAddress, name: "emailAddress", parent: name, max: 320)
            try self.validate(self.emailAddress, name: "emailAddress", parent: name, min: 1)
            try self.validate(self.emailAddress, name: "emailAddress", parent: name, pattern: "^.*@.*$")
            try self.validate(self.id, name: "id", parent: name, max: 12)
            try self.validate(self.id, name: "id", parent: name, min: 12)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[0-9]{12}$")
            try self.validate(self.name, name: "name", parent: name, max: 50)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\u0020-\\u007E]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case emailAddress
            case id
            case name
        }
    }

    public struct AWSService: AWSEncodableShape & AWSDecodableShape {
        ///  The name of the AWS service.
        public let serviceName: String?

        public init(serviceName: String? = nil) {
            self.serviceName = serviceName
        }

        public func validate(name: String) throws {
            try self.validate(self.serviceName, name: "serviceName", parent: name, max: 40)
            try self.validate(self.serviceName, name: "serviceName", parent: name, min: 1)
            try self.validate(self.serviceName, name: "serviceName", parent: name, pattern: "^[a-zA-Z0-9-\\s().]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case serviceName
        }
    }

    public struct Assessment: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the assessment.
        public let arn: String?
        ///  The AWS account associated with the assessment.
        public let awsAccount: AWSAccount?
        ///  The framework from which the assessment was created.
        public let framework: AssessmentFramework?
        ///  The metadata for the specified assessment.
        public let metadata: AssessmentMetadata?
        ///  The tags associated with the assessment.
        public let tags: [String: String]?

        public init(arn: String? = nil, awsAccount: AWSAccount? = nil, framework: AssessmentFramework? = nil, metadata: AssessmentMetadata? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.awsAccount = awsAccount
            self.framework = framework
            self.metadata = metadata
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case awsAccount
            case framework
            case metadata
            case tags
        }
    }

    public struct AssessmentControl: AWSDecodableShape {
        ///  The amount of evidence in the assessment report.
        public let assessmentReportEvidenceCount: Int?
        ///  The list of comments attached to the specified control.
        public let comments: [ControlComment]?
        ///  The description of the specified control.
        public let description: String?
        ///  The amount of evidence generated for the control.
        public let evidenceCount: Int?
        ///  The list of data sources for the specified evidence.
        public let evidenceSources: [String]?
        ///  The identifier for the specified control.
        public let id: String?
        ///  The name of the specified control.
        public let name: String?
        ///  The response of the specified control.
        public let response: ControlResponse?
        ///  The status of the specified control.
        public let status: ControlStatus?

        public init(assessmentReportEvidenceCount: Int? = nil, comments: [ControlComment]? = nil, description: String? = nil, evidenceCount: Int? = nil, evidenceSources: [String]? = nil, id: String? = nil, name: String? = nil, response: ControlResponse? = nil, status: ControlStatus? = nil) {
            self.assessmentReportEvidenceCount = assessmentReportEvidenceCount
            self.comments = comments
            self.description = description
            self.evidenceCount = evidenceCount
            self.evidenceSources = evidenceSources
            self.id = id
            self.name = name
            self.response = response
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReportEvidenceCount
            case comments
            case description
            case evidenceCount
            case evidenceSources
            case id
            case name
            case response
            case status
        }
    }

    public struct AssessmentControlSet: AWSDecodableShape {
        ///  The list of controls contained with the control set.
        public let controls: [AssessmentControl]?
        ///  The delegations associated with the control set.
        public let delegations: [Delegation]?
        ///  The description for the control set.
        public let description: String?
        ///  The identifier of the control set in the assessment. This is the control set name in a plain string format.
        public let id: String?
        ///  The total number of evidence objects uploaded manually to the control set.
        public let manualEvidenceCount: Int?
        ///  The roles associated with the control set.
        public let roles: [Role]?
        ///  Specifies the current status of the control set.
        public let status: ControlSetStatus?
        ///  The total number of evidence objects retrieved automatically for the control set.
        public let systemEvidenceCount: Int?

        public init(controls: [AssessmentControl]? = nil, delegations: [Delegation]? = nil, description: String? = nil, id: String? = nil, manualEvidenceCount: Int? = nil, roles: [Role]? = nil, status: ControlSetStatus? = nil, systemEvidenceCount: Int? = nil) {
            self.controls = controls
            self.delegations = delegations
            self.description = description
            self.id = id
            self.manualEvidenceCount = manualEvidenceCount
            self.roles = roles
            self.status = status
            self.systemEvidenceCount = systemEvidenceCount
        }

        private enum CodingKeys: String, CodingKey {
            case controls
            case delegations
            case description
            case id
            case manualEvidenceCount
            case roles
            case status
            case systemEvidenceCount
        }
    }

    public struct AssessmentEvidenceFolder: AWSDecodableShape {
        ///  The identifier for the specified assessment.
        public let assessmentId: String?
        ///  The total count of evidence included in the assessment report.
        public let assessmentReportSelectionCount: Int?
        ///  The name of the user who created the evidence folder.
        public let author: String?
        ///  The unique identifier for the specified control.
        public let controlId: String?
        ///  The name of the control.
        public let controlName: String?
        ///  The identifier for the control set.
        public let controlSetId: String?
        ///  The AWS service from which the evidence was collected.
        public let dataSource: String?
        ///  The date when the first evidence was added to the evidence folder.
        public let date: Date?
        ///  The total number of AWS resources assessed to generate the evidence.
        public let evidenceAwsServiceSourceCount: Int?
        ///  The number of evidence that falls under the compliance check category. This evidence is collected from AWS Config or AWS Security Hub.
        public let evidenceByTypeComplianceCheckCount: Int?
        ///  The total number of issues that were reported directly from AWS Security Hub, AWS Config, or both.
        public let evidenceByTypeComplianceCheckIssuesCount: Int?
        ///  The number of evidence that falls under the configuration data category. This evidence is collected from configuration snapshots of other AWS services such as Amazon EC2, Amazon S3, or IAM.
        public let evidenceByTypeConfigurationDataCount: Int?
        ///  The number of evidence that falls under the manual category. This evidence is imported manually.
        public let evidenceByTypeManualCount: Int?
        ///  The number of evidence that falls under the user activity category. This evidence is collected from AWS CloudTrail logs.
        public let evidenceByTypeUserActivityCount: Int?
        ///  The amount of evidence included in the evidence folder.
        public let evidenceResourcesIncludedCount: Int?
        ///  The identifier for the folder in which evidence is stored.
        public let id: String?
        ///  The name of the specified evidence folder.
        public let name: String?
        ///  The total amount of evidence in the evidence folder.
        public let totalEvidence: Int?

        public init(assessmentId: String? = nil, assessmentReportSelectionCount: Int? = nil, author: String? = nil, controlId: String? = nil, controlName: String? = nil, controlSetId: String? = nil, dataSource: String? = nil, date: Date? = nil, evidenceAwsServiceSourceCount: Int? = nil, evidenceByTypeComplianceCheckCount: Int? = nil, evidenceByTypeComplianceCheckIssuesCount: Int? = nil, evidenceByTypeConfigurationDataCount: Int? = nil, evidenceByTypeManualCount: Int? = nil, evidenceByTypeUserActivityCount: Int? = nil, evidenceResourcesIncludedCount: Int? = nil, id: String? = nil, name: String? = nil, totalEvidence: Int? = nil) {
            self.assessmentId = assessmentId
            self.assessmentReportSelectionCount = assessmentReportSelectionCount
            self.author = author
            self.controlId = controlId
            self.controlName = controlName
            self.controlSetId = controlSetId
            self.dataSource = dataSource
            self.date = date
            self.evidenceAwsServiceSourceCount = evidenceAwsServiceSourceCount
            self.evidenceByTypeComplianceCheckCount = evidenceByTypeComplianceCheckCount
            self.evidenceByTypeComplianceCheckIssuesCount = evidenceByTypeComplianceCheckIssuesCount
            self.evidenceByTypeConfigurationDataCount = evidenceByTypeConfigurationDataCount
            self.evidenceByTypeManualCount = evidenceByTypeManualCount
            self.evidenceByTypeUserActivityCount = evidenceByTypeUserActivityCount
            self.evidenceResourcesIncludedCount = evidenceResourcesIncludedCount
            self.id = id
            self.name = name
            self.totalEvidence = totalEvidence
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentReportSelectionCount
            case author
            case controlId
            case controlName
            case controlSetId
            case dataSource
            case date
            case evidenceAwsServiceSourceCount
            case evidenceByTypeComplianceCheckCount
            case evidenceByTypeComplianceCheckIssuesCount
            case evidenceByTypeConfigurationDataCount
            case evidenceByTypeManualCount
            case evidenceByTypeUserActivityCount
            case evidenceResourcesIncludedCount
            case id
            case name
            case totalEvidence
        }
    }

    public struct AssessmentFramework: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the specified framework.
        public let arn: String?
        ///  The control sets associated with the framework.
        public let controlSets: [AssessmentControlSet]?
        ///  The unique identifier for the framework.
        public let id: String?
        public let metadata: FrameworkMetadata?

        public init(arn: String? = nil, controlSets: [AssessmentControlSet]? = nil, id: String? = nil, metadata: FrameworkMetadata? = nil) {
            self.arn = arn
            self.controlSets = controlSets
            self.id = id
            self.metadata = metadata
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case controlSets
            case id
            case metadata
        }
    }

    public struct AssessmentFrameworkMetadata: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the framework.
        public let arn: String?
        ///  The compliance type that the new custom framework supports, such as CIS or HIPAA.
        public let complianceType: String?
        ///  The number of controls associated with the specified framework.
        public let controlsCount: Int?
        ///  The number of control sets associated with the specified framework.
        public let controlSetsCount: Int?
        ///  Specifies when the framework was created.
        public let createdAt: Date?
        ///  The description of the specified framework.
        public let description: String?
        ///  The unique identified for the specified framework.
        public let id: String?
        ///  Specifies when the framework was most recently updated.
        public let lastUpdatedAt: Date?
        ///  The logo associated with the framework.
        public let logo: String?
        ///  The name of the specified framework.
        public let name: String?
        ///  The framework type, such as standard or custom.
        public let type: FrameworkType?

        public init(arn: String? = nil, complianceType: String? = nil, controlsCount: Int? = nil, controlSetsCount: Int? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, lastUpdatedAt: Date? = nil, logo: String? = nil, name: String? = nil, type: FrameworkType? = nil) {
            self.arn = arn
            self.complianceType = complianceType
            self.controlsCount = controlsCount
            self.controlSetsCount = controlSetsCount
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.lastUpdatedAt = lastUpdatedAt
            self.logo = logo
            self.name = name
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case complianceType
            case controlsCount
            case controlSetsCount
            case createdAt
            case description
            case id
            case lastUpdatedAt
            case logo
            case name
            case type
        }
    }

    public struct AssessmentMetadata: AWSDecodableShape {
        ///  The destination in which evidence reports are stored for the specified assessment.
        public let assessmentReportsDestination: AssessmentReportsDestination?
        ///  The name of a compliance standard related to the assessment, such as PCI-DSS.
        public let complianceType: String?
        ///  Specifies when the assessment was created.
        public let creationTime: Date?
        ///  The delegations associated with the assessment.
        public let delegations: [Delegation]?
        ///  The description of the assessment.
        public let description: String?
        ///  The unique identifier for the assessment.
        public let id: String?
        ///  The time of the most recent update.
        public let lastUpdated: Date?
        ///  The name of the assessment.
        public let name: String?
        ///  The roles associated with the assessment.
        public let roles: [Role]?
        ///  The wrapper of AWS accounts and services in scope for the assessment.
        public let scope: Scope?
        ///  The overall status of the assessment.
        public let status: AssessmentStatus?

        public init(assessmentReportsDestination: AssessmentReportsDestination? = nil, complianceType: String? = nil, creationTime: Date? = nil, delegations: [Delegation]? = nil, description: String? = nil, id: String? = nil, lastUpdated: Date? = nil, name: String? = nil, roles: [Role]? = nil, scope: Scope? = nil, status: AssessmentStatus? = nil) {
            self.assessmentReportsDestination = assessmentReportsDestination
            self.complianceType = complianceType
            self.creationTime = creationTime
            self.delegations = delegations
            self.description = description
            self.id = id
            self.lastUpdated = lastUpdated
            self.name = name
            self.roles = roles
            self.scope = scope
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReportsDestination
            case complianceType
            case creationTime
            case delegations
            case description
            case id
            case lastUpdated
            case name
            case roles
            case scope
            case status
        }
    }

    public struct AssessmentMetadataItem: AWSDecodableShape {
        ///  The name of the compliance standard related to the assessment, such as PCI-DSS.
        public let complianceType: String?
        ///  Specifies when the assessment was created.
        public let creationTime: Date?
        ///  The delegations associated with the assessment.
        public let delegations: [Delegation]?
        ///  The unique identifier for the assessment.
        public let id: String?
        ///  The time of the most recent update.
        public let lastUpdated: Date?
        ///  The name of the assessment.
        public let name: String?
        ///  The roles associated with the assessment.
        public let roles: [Role]?
        ///  The current status of the assessment.
        public let status: AssessmentStatus?

        public init(complianceType: String? = nil, creationTime: Date? = nil, delegations: [Delegation]? = nil, id: String? = nil, lastUpdated: Date? = nil, name: String? = nil, roles: [Role]? = nil, status: AssessmentStatus? = nil) {
            self.complianceType = complianceType
            self.creationTime = creationTime
            self.delegations = delegations
            self.id = id
            self.lastUpdated = lastUpdated
            self.name = name
            self.roles = roles
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case complianceType
            case creationTime
            case delegations
            case id
            case lastUpdated
            case name
            case roles
            case status
        }
    }

    public struct AssessmentReport: AWSDecodableShape {
        ///  The identifier for the specified assessment.
        public let assessmentId: String?
        ///  The name of the associated assessment.
        public let assessmentName: String?
        ///  The name of the user who created the assessment report.
        public let author: String?
        ///  The identifier for the specified AWS account.
        public let awsAccountId: String?
        ///  Specifies when the assessment report was created.
        public let creationTime: Date?
        ///  The description of the specified assessment report.
        public let description: String?
        ///  The unique identifier for the specified assessment report.
        public let id: String?
        ///  The name given to the assessment report.
        public let name: String?
        ///  The current status of the specified assessment report.
        public let status: AssessmentReportStatus?

        public init(assessmentId: String? = nil, assessmentName: String? = nil, author: String? = nil, awsAccountId: String? = nil, creationTime: Date? = nil, description: String? = nil, id: String? = nil, name: String? = nil, status: AssessmentReportStatus? = nil) {
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.author = author
            self.awsAccountId = awsAccountId
            self.creationTime = creationTime
            self.description = description
            self.id = id
            self.name = name
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentName
            case author
            case awsAccountId
            case creationTime
            case description
            case id
            case name
            case status
        }
    }

    public struct AssessmentReportEvidenceError: AWSDecodableShape {
        ///  The error code returned by the AssessmentReportEvidence API.
        public let errorCode: String?
        ///  The error message returned by the AssessmentReportEvidence API.
        public let errorMessage: String?
        ///  The identifier for the evidence.
        public let evidenceId: String?

        public init(errorCode: String? = nil, errorMessage: String? = nil, evidenceId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.evidenceId = evidenceId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode
            case errorMessage
            case evidenceId
        }
    }

    public struct AssessmentReportMetadata: AWSDecodableShape {
        ///  The unique identifier for the associated assessment.
        public let assessmentId: String?
        /// The name of the associated assessment.
        public let assessmentName: String?
        ///  The name of the user who created the assessment report.
        public let author: String?
        ///  Specifies when the assessment report was created.
        public let creationTime: Date?
        ///  The description of the specified assessment report.
        public let description: String?
        ///  The unique identifier for the assessment report.
        public let id: String?
        ///  The name of the assessment report.
        public let name: String?
        ///  The current status of the assessment report.
        public let status: AssessmentReportStatus?

        public init(assessmentId: String? = nil, assessmentName: String? = nil, author: String? = nil, creationTime: Date? = nil, description: String? = nil, id: String? = nil, name: String? = nil, status: AssessmentReportStatus? = nil) {
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.id = id
            self.name = name
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentName
            case author
            case creationTime
            case description
            case id
            case name
            case status
        }
    }

    public struct AssessmentReportsDestination: AWSEncodableShape & AWSDecodableShape {
        ///  The destination of the assessment report.
        public let destination: String?
        ///  The destination type, such as Amazon S3.
        public let destinationType: AssessmentReportDestinationType?

        public init(destination: String? = nil, destinationType: AssessmentReportDestinationType? = nil) {
            self.destination = destination
            self.destinationType = destinationType
        }

        public func validate(name: String) throws {
            try self.validate(self.destination, name: "destination", parent: name, max: 1024)
            try self.validate(self.destination, name: "destination", parent: name, min: 1)
            try self.validate(self.destination, name: "destination", parent: name, pattern: "^(S|s)3:\\/\\/[a-zA-Z0-9-_\\/.]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case destination
            case destinationType
        }
    }

    public struct AssociateAssessmentReportEvidenceFolderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the folder in which evidence is stored.
        public let evidenceFolderId: String

        public init(assessmentId: String, evidenceFolderId: String) {
            self.assessmentId = assessmentId
            self.evidenceFolderId = evidenceFolderId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolderId
        }
    }

    public struct AssociateAssessmentReportEvidenceFolderResponse: AWSDecodableShape {
        public init() {}
    }

    public struct BatchAssociateAssessmentReportEvidenceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The unique identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the folder in which the evidence is stored.
        public let evidenceFolderId: String
        ///  The list of evidence identifiers.
        public let evidenceIds: [String]

        public init(assessmentId: String, evidenceFolderId: String, evidenceIds: [String]) {
            self.assessmentId = assessmentId
            self.evidenceFolderId = evidenceFolderId
            self.evidenceIds = evidenceIds
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.evidenceIds.forEach {
                try validate($0, name: "evidenceIds[]", parent: name, max: 36)
                try validate($0, name: "evidenceIds[]", parent: name, min: 36)
                try validate($0, name: "evidenceIds[]", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            }
            try self.validate(self.evidenceIds, name: "evidenceIds", parent: name, max: 50)
            try self.validate(self.evidenceIds, name: "evidenceIds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolderId
            case evidenceIds
        }
    }

    public struct BatchAssociateAssessmentReportEvidenceResponse: AWSDecodableShape {
        ///  A list of errors returned by the BatchAssociateAssessmentReportEvidence API.
        public let errors: [AssessmentReportEvidenceError]?
        ///  The identifier for the evidence.
        public let evidenceIds: [String]?

        public init(errors: [AssessmentReportEvidenceError]? = nil, evidenceIds: [String]? = nil) {
            self.errors = errors
            self.evidenceIds = evidenceIds
        }

        private enum CodingKeys: String, CodingKey {
            case errors
            case evidenceIds
        }
    }

    public struct BatchCreateDelegationByAssessmentError: AWSDecodableShape {
        ///  The API request to batch create delegations in AWS Audit Manager.
        public let createDelegationRequest: CreateDelegationRequest?
        ///  The error code returned by the BatchCreateDelegationByAssessment API.
        public let errorCode: String?
        ///  The error message returned by the BatchCreateDelegationByAssessment API.
        public let errorMessage: String?

        public init(createDelegationRequest: CreateDelegationRequest? = nil, errorCode: String? = nil, errorMessage: String? = nil) {
            self.createDelegationRequest = createDelegationRequest
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case createDelegationRequest
            case errorCode
            case errorMessage
        }
    }

    public struct BatchCreateDelegationByAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The API request to batch create delegations in AWS Audit Manager.
        public let createDelegationRequests: [CreateDelegationRequest]

        public init(assessmentId: String, createDelegationRequests: [CreateDelegationRequest]) {
            self.assessmentId = assessmentId
            self.createDelegationRequests = createDelegationRequests
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.createDelegationRequests.forEach {
                try $0.validate(name: "\(name).createDelegationRequests[]")
            }
            try self.validate(self.createDelegationRequests, name: "createDelegationRequests", parent: name, max: 50)
            try self.validate(self.createDelegationRequests, name: "createDelegationRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case createDelegationRequests
        }
    }

    public struct BatchCreateDelegationByAssessmentResponse: AWSDecodableShape {
        ///  The delegations associated with the assessment.
        public let delegations: [Delegation]?
        ///  A list of errors returned by the BatchCreateDelegationByAssessment API.
        public let errors: [BatchCreateDelegationByAssessmentError]?

        public init(delegations: [Delegation]? = nil, errors: [BatchCreateDelegationByAssessmentError]? = nil) {
            self.delegations = delegations
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case delegations
            case errors
        }
    }

    public struct BatchDeleteDelegationByAssessmentError: AWSDecodableShape {
        ///  The identifier for the specified delegation.
        public let delegationId: String?
        ///  The error code returned by the BatchDeleteDelegationByAssessment API.
        public let errorCode: String?
        ///  The error message returned by the BatchDeleteDelegationByAssessment API.
        public let errorMessage: String?

        public init(delegationId: String? = nil, errorCode: String? = nil, errorMessage: String? = nil) {
            self.delegationId = delegationId
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case delegationId
            case errorCode
            case errorMessage
        }
    }

    public struct BatchDeleteDelegationByAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifiers for the specified delegations.
        public let delegationIds: [String]

        public init(assessmentId: String, delegationIds: [String]) {
            self.assessmentId = assessmentId
            self.delegationIds = delegationIds
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.delegationIds.forEach {
                try validate($0, name: "delegationIds[]", parent: name, max: 36)
                try validate($0, name: "delegationIds[]", parent: name, min: 36)
                try validate($0, name: "delegationIds[]", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            }
            try self.validate(self.delegationIds, name: "delegationIds", parent: name, max: 50)
            try self.validate(self.delegationIds, name: "delegationIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case delegationIds
        }
    }

    public struct BatchDeleteDelegationByAssessmentResponse: AWSDecodableShape {
        ///  A list of errors returned by the BatchDeleteDelegationByAssessment API.
        public let errors: [BatchDeleteDelegationByAssessmentError]?

        public init(errors: [BatchDeleteDelegationByAssessmentError]? = nil) {
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case errors
        }
    }

    public struct BatchDisassociateAssessmentReportEvidenceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the folder in which evidence is stored.
        public let evidenceFolderId: String
        ///  The list of evidence identifiers.
        public let evidenceIds: [String]

        public init(assessmentId: String, evidenceFolderId: String, evidenceIds: [String]) {
            self.assessmentId = assessmentId
            self.evidenceFolderId = evidenceFolderId
            self.evidenceIds = evidenceIds
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.evidenceIds.forEach {
                try validate($0, name: "evidenceIds[]", parent: name, max: 36)
                try validate($0, name: "evidenceIds[]", parent: name, min: 36)
                try validate($0, name: "evidenceIds[]", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            }
            try self.validate(self.evidenceIds, name: "evidenceIds", parent: name, max: 50)
            try self.validate(self.evidenceIds, name: "evidenceIds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolderId
            case evidenceIds
        }
    }

    public struct BatchDisassociateAssessmentReportEvidenceResponse: AWSDecodableShape {
        ///  A list of errors returned by the BatchDisassociateAssessmentReportEvidence API.
        public let errors: [AssessmentReportEvidenceError]?
        ///  The identifier for the evidence.
        public let evidenceIds: [String]?

        public init(errors: [AssessmentReportEvidenceError]? = nil, evidenceIds: [String]? = nil) {
            self.errors = errors
            self.evidenceIds = evidenceIds
        }

        private enum CodingKeys: String, CodingKey {
            case errors
            case evidenceIds
        }
    }

    public struct BatchImportEvidenceToAssessmentControlError: AWSDecodableShape {
        ///  The error code returned by the BatchImportEvidenceToAssessmentControl API.
        public let errorCode: String?
        ///  The error message returned by the BatchImportEvidenceToAssessmentControl API.
        public let errorMessage: String?
        ///  Manual evidence that cannot be collected automatically by AWS Audit Manager.
        public let manualEvidence: ManualEvidence?

        public init(errorCode: String? = nil, errorMessage: String? = nil, manualEvidence: ManualEvidence? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.manualEvidence = manualEvidence
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode
            case errorMessage
            case manualEvidence
        }
    }

    public struct BatchImportEvidenceToAssessmentControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the specified control.
        public let controlId: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  The list of manual evidence objects.
        public let manualEvidence: [ManualEvidence]

        public init(assessmentId: String, controlId: String, controlSetId: String, manualEvidence: [ManualEvidence]) {
            self.assessmentId = assessmentId
            self.controlId = controlId
            self.controlSetId = controlSetId
            self.manualEvidence = manualEvidence
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.manualEvidence.forEach {
                try $0.validate(name: "\(name).manualEvidence[]")
            }
            try self.validate(self.manualEvidence, name: "manualEvidence", parent: name, max: 50)
            try self.validate(self.manualEvidence, name: "manualEvidence", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case manualEvidence
        }
    }

    public struct BatchImportEvidenceToAssessmentControlResponse: AWSDecodableShape {
        ///  A list of errors returned by the BatchImportEvidenceToAssessmentControl API.
        public let errors: [BatchImportEvidenceToAssessmentControlError]?

        public init(errors: [BatchImportEvidenceToAssessmentControlError]? = nil) {
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case errors
        }
    }

    public struct ChangeLog: AWSDecodableShape {
        ///  The action performed.
        public let action: ActionEnum?
        ///  The time of creation for the changelog object.
        public let createdAt: Date?
        ///  The IAM user or role that performed the action.
        public let createdBy: String?
        ///  The name of the changelog object.
        public let objectName: String?
        ///  The changelog object type, such as an assessment, control, or control set.
        public let objectType: ObjectTypeEnum?

        public init(action: ActionEnum? = nil, createdAt: Date? = nil, createdBy: String? = nil, objectName: String? = nil, objectType: ObjectTypeEnum? = nil) {
            self.action = action
            self.createdAt = createdAt
            self.createdBy = createdBy
            self.objectName = objectName
            self.objectType = objectType
        }

        private enum CodingKeys: String, CodingKey {
            case action
            case createdAt
            case createdBy
            case objectName
            case objectType
        }
    }

    public struct Control: AWSDecodableShape {
        ///  The recommended actions to carry out if the control is not fulfilled.
        public let actionPlanInstructions: String?
        ///  The title of the action plan for remediating the control.
        public let actionPlanTitle: String?
        ///  The Amazon Resource Name (ARN) of the specified control.
        public let arn: String?
        ///  The data mapping sources for the specified control.
        public let controlMappingSources: [ControlMappingSource]?
        ///  The data source that determines from where AWS Audit Manager collects evidence for the control.
        public let controlSources: String?
        ///  Specifies when the control was created.
        public let createdAt: Date?
        ///  The IAM user or role that created the control.
        public let createdBy: String?
        ///  The description of the specified control.
        public let description: String?
        ///  The unique identifier for the control.
        public let id: String?
        ///  Specifies when the control was most recently updated.
        public let lastUpdatedAt: Date?
        ///  The IAM user or role that most recently updated the control.
        public let lastUpdatedBy: String?
        ///  The name of the specified control.
        public let name: String?
        ///  The tags associated with the control.
        public let tags: [String: String]?
        ///  The steps to follow to determine if the control has been satisfied.
        public let testingInformation: String?
        ///  The type of control, such as custom or standard.
        public let type: ControlType?

        public init(actionPlanInstructions: String? = nil, actionPlanTitle: String? = nil, arn: String? = nil, controlMappingSources: [ControlMappingSource]? = nil, controlSources: String? = nil, createdAt: Date? = nil, createdBy: String? = nil, description: String? = nil, id: String? = nil, lastUpdatedAt: Date? = nil, lastUpdatedBy: String? = nil, name: String? = nil, tags: [String: String]? = nil, testingInformation: String? = nil, type: ControlType? = nil) {
            self.actionPlanInstructions = actionPlanInstructions
            self.actionPlanTitle = actionPlanTitle
            self.arn = arn
            self.controlMappingSources = controlMappingSources
            self.controlSources = controlSources
            self.createdAt = createdAt
            self.createdBy = createdBy
            self.description = description
            self.id = id
            self.lastUpdatedAt = lastUpdatedAt
            self.lastUpdatedBy = lastUpdatedBy
            self.name = name
            self.tags = tags
            self.testingInformation = testingInformation
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case actionPlanInstructions
            case actionPlanTitle
            case arn
            case controlMappingSources
            case controlSources
            case createdAt
            case createdBy
            case description
            case id
            case lastUpdatedAt
            case lastUpdatedBy
            case name
            case tags
            case testingInformation
            case type
        }
    }

    public struct ControlComment: AWSDecodableShape {
        ///  The name of the user who authored the comment.
        public let authorName: String?
        ///  The body text of a control comment.
        public let commentBody: String?
        ///  The time when the comment was posted.
        public let postedDate: Date?

        public init(authorName: String? = nil, commentBody: String? = nil, postedDate: Date? = nil) {
            self.authorName = authorName
            self.commentBody = commentBody
            self.postedDate = postedDate
        }

        private enum CodingKeys: String, CodingKey {
            case authorName
            case commentBody
            case postedDate
        }
    }

    public struct ControlMappingSource: AWSEncodableShape & AWSDecodableShape {
        ///  The description of the specified source.
        public let sourceDescription: String?
        ///  The frequency of evidence collection for the specified control mapping source.
        public let sourceFrequency: SourceFrequency?
        ///  The unique identifier for the specified source.
        public let sourceId: String?
        public let sourceKeyword: SourceKeyword?
        ///  The name of the specified source.
        public let sourceName: String?
        ///  The setup option for the data source, which reflects if the evidence collection is automated or manual.
        public let sourceSetUpOption: SourceSetUpOption?
        ///  Specifies one of the five types of data sources for evidence collection.
        public let sourceType: SourceType?
        ///  The instructions for troubleshooting the specified control.
        public let troubleshootingText: String?

        public init(sourceDescription: String? = nil, sourceFrequency: SourceFrequency? = nil, sourceId: String? = nil, sourceKeyword: SourceKeyword? = nil, sourceName: String? = nil, sourceSetUpOption: SourceSetUpOption? = nil, sourceType: SourceType? = nil, troubleshootingText: String? = nil) {
            self.sourceDescription = sourceDescription
            self.sourceFrequency = sourceFrequency
            self.sourceId = sourceId
            self.sourceKeyword = sourceKeyword
            self.sourceName = sourceName
            self.sourceSetUpOption = sourceSetUpOption
            self.sourceType = sourceType
            self.troubleshootingText = troubleshootingText
        }

        public func validate(name: String) throws {
            try self.validate(self.sourceDescription, name: "sourceDescription", parent: name, max: 1000)
            try self.validate(self.sourceDescription, name: "sourceDescription", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.sourceId, name: "sourceId", parent: name, max: 36)
            try self.validate(self.sourceId, name: "sourceId", parent: name, min: 36)
            try self.validate(self.sourceId, name: "sourceId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.sourceKeyword?.validate(name: "\(name).sourceKeyword")
            try self.validate(self.sourceName, name: "sourceName", parent: name, max: 100)
            try self.validate(self.sourceName, name: "sourceName", parent: name, min: 1)
            try self.validate(self.troubleshootingText, name: "troubleshootingText", parent: name, max: 1000)
            try self.validate(self.troubleshootingText, name: "troubleshootingText", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case sourceDescription
            case sourceFrequency
            case sourceId
            case sourceKeyword
            case sourceName
            case sourceSetUpOption
            case sourceType
            case troubleshootingText
        }
    }

    public struct ControlMetadata: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the specified control.
        public let arn: String?
        ///  The data source that determines from where AWS Audit Manager collects evidence for the control.
        public let controlSources: String?
        ///  Specifies when the control was created.
        public let createdAt: Date?
        ///  The unique identifier for the specified control.
        public let id: String?
        ///  Specifies when the control was most recently updated.
        public let lastUpdatedAt: Date?
        ///  The name of the specified control.
        public let name: String?

        public init(arn: String? = nil, controlSources: String? = nil, createdAt: Date? = nil, id: String? = nil, lastUpdatedAt: Date? = nil, name: String? = nil) {
            self.arn = arn
            self.controlSources = controlSources
            self.createdAt = createdAt
            self.id = id
            self.lastUpdatedAt = lastUpdatedAt
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case controlSources
            case createdAt
            case id
            case lastUpdatedAt
            case name
        }
    }

    public struct ControlSet: AWSDecodableShape {
        ///  The list of controls within the control set.
        public let controls: [Control]?
        ///  The identifier of the control set in the assessment. This is the control set name in a plain string format.
        public let id: String?
        ///  The name of the control set.
        public let name: String?

        public init(controls: [Control]? = nil, id: String? = nil, name: String? = nil) {
            self.controls = controls
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case controls
            case id
            case name
        }
    }

    public struct CreateAssessmentFrameworkControl: AWSEncodableShape {
        ///  The unique identifier of the control.
        public let id: String?

        public init(id: String? = nil) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case id
        }
    }

    public struct CreateAssessmentFrameworkControlSet: AWSEncodableShape {
        ///  The list of controls within the control set. This does not contain the control set ID.
        public let controls: [CreateAssessmentFrameworkControl]?
        ///  The name of the specified control set.
        public let name: String?

        public init(controls: [CreateAssessmentFrameworkControl]? = nil, name: String? = nil) {
            self.controls = controls
            self.name = name
        }

        public func validate(name: String) throws {
            try self.controls?.forEach {
                try $0.validate(name: "\(name).controls[]")
            }
            try self.validate(self.controls, name: "controls", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\_]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case controls
            case name
        }
    }

    public struct CreateAssessmentFrameworkRequest: AWSEncodableShape {
        ///  The compliance type that the new custom framework supports, such as CIS or HIPAA.
        public let complianceType: String?
        ///  The control sets to be associated with the framework.
        public let controlSets: [CreateAssessmentFrameworkControlSet]
        ///  An optional description for the new custom framework.
        public let description: String?
        ///  The name of the new custom framework.
        public let name: String
        ///  The tags associated with the framework.
        public let tags: [String: String]?

        public init(complianceType: String? = nil, controlSets: [CreateAssessmentFrameworkControlSet], description: String? = nil, name: String, tags: [String: String]? = nil) {
            self.complianceType = complianceType
            self.controlSets = controlSets
            self.description = description
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.complianceType, name: "complianceType", parent: name, max: 100)
            try self.validate(self.complianceType, name: "complianceType", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.controlSets.forEach {
                try $0.validate(name: "\(name).controlSets[]")
            }
            try self.validate(self.controlSets, name: "controlSets", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.key, name: "tags.key", parent: name, pattern: "^(?!aws:)[a-zA-Z+-=._:/]+$")
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, min: 0)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, pattern: ".{0,255}")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case complianceType
            case controlSets
            case description
            case name
            case tags
        }
    }

    public struct CreateAssessmentFrameworkResponse: AWSDecodableShape {
        ///  The name of the new framework returned by the CreateAssessmentFramework API.
        public let framework: Framework?

        public init(framework: Framework? = nil) {
            self.framework = framework
        }

        private enum CodingKeys: String, CodingKey {
            case framework
        }
    }

    public struct CreateAssessmentReportRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The description of the assessment report.
        public let description: String?
        ///  The name of the new assessment report.
        public let name: String

        public init(assessmentId: String, description: String? = nil, name: String) {
            self.assessmentId = assessmentId
            self.description = description
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_\\.]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case description
            case name
        }
    }

    public struct CreateAssessmentReportResponse: AWSDecodableShape {
        ///  The new assessment report returned by the CreateAssessmentReport API.
        public let assessmentReport: AssessmentReport?

        public init(assessmentReport: AssessmentReport? = nil) {
            self.assessmentReport = assessmentReport
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReport
        }
    }

    public struct CreateAssessmentRequest: AWSEncodableShape {
        ///  The assessment report storage destination for the specified assessment that is being created.
        public let assessmentReportsDestination: AssessmentReportsDestination
        ///  The optional description of the assessment to be created.
        public let description: String?
        ///  The identifier for the specified framework.
        public let frameworkId: String
        ///  The name of the assessment to be created.
        public let name: String
        ///  The list of roles for the specified assessment.
        public let roles: [Role]
        public let scope: Scope
        ///  The tags associated with the assessment.
        public let tags: [String: String]?

        public init(assessmentReportsDestination: AssessmentReportsDestination, description: String? = nil, frameworkId: String, name: String, roles: [Role], scope: Scope, tags: [String: String]? = nil) {
            self.assessmentReportsDestination = assessmentReportsDestination
            self.description = description
            self.frameworkId = frameworkId
            self.name = name
            self.roles = roles
            self.scope = scope
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.assessmentReportsDestination.validate(name: "\(name).assessmentReportsDestination")
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, max: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, min: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.roles.forEach {
                try $0.validate(name: "\(name).roles[]")
            }
            try self.scope.validate(name: "\(name).scope")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.key, name: "tags.key", parent: name, pattern: "^(?!aws:)[a-zA-Z+-=._:/]+$")
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, min: 0)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, pattern: ".{0,255}")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReportsDestination
            case description
            case frameworkId
            case name
            case roles
            case scope
            case tags
        }
    }

    public struct CreateAssessmentResponse: AWSDecodableShape {
        public let assessment: Assessment?

        public init(assessment: Assessment? = nil) {
            self.assessment = assessment
        }

        private enum CodingKeys: String, CodingKey {
            case assessment
        }
    }

    public struct CreateControlMappingSource: AWSEncodableShape {
        ///  The description of the data source that determines from where AWS Audit Manager collects evidence for the control.
        public let sourceDescription: String?
        ///  The frequency of evidence collection for the specified control mapping source.
        public let sourceFrequency: SourceFrequency?
        public let sourceKeyword: SourceKeyword?
        ///  The name of the control mapping data source.
        public let sourceName: String?
        ///  The setup option for the data source, which reflects if the evidence collection is automated or manual.
        public let sourceSetUpOption: SourceSetUpOption?
        ///  Specifies one of the five types of data sources for evidence collection.
        public let sourceType: SourceType?
        ///  The instructions for troubleshooting the specified control.
        public let troubleshootingText: String?

        public init(sourceDescription: String? = nil, sourceFrequency: SourceFrequency? = nil, sourceKeyword: SourceKeyword? = nil, sourceName: String? = nil, sourceSetUpOption: SourceSetUpOption? = nil, sourceType: SourceType? = nil, troubleshootingText: String? = nil) {
            self.sourceDescription = sourceDescription
            self.sourceFrequency = sourceFrequency
            self.sourceKeyword = sourceKeyword
            self.sourceName = sourceName
            self.sourceSetUpOption = sourceSetUpOption
            self.sourceType = sourceType
            self.troubleshootingText = troubleshootingText
        }

        public func validate(name: String) throws {
            try self.validate(self.sourceDescription, name: "sourceDescription", parent: name, max: 1000)
            try self.validate(self.sourceDescription, name: "sourceDescription", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.sourceKeyword?.validate(name: "\(name).sourceKeyword")
            try self.validate(self.sourceName, name: "sourceName", parent: name, max: 100)
            try self.validate(self.sourceName, name: "sourceName", parent: name, min: 1)
            try self.validate(self.troubleshootingText, name: "troubleshootingText", parent: name, max: 1000)
            try self.validate(self.troubleshootingText, name: "troubleshootingText", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case sourceDescription
            case sourceFrequency
            case sourceKeyword
            case sourceName
            case sourceSetUpOption
            case sourceType
            case troubleshootingText
        }
    }

    public struct CreateControlRequest: AWSEncodableShape {
        ///  The recommended actions to carry out if the control is not fulfilled.
        public let actionPlanInstructions: String?
        ///  The title of the action plan for remediating the control.
        public let actionPlanTitle: String?
        ///  The data mapping sources for the specified control.
        public let controlMappingSources: [CreateControlMappingSource]
        ///  The description of the control.
        public let description: String?
        ///  The name of the control.
        public let name: String
        ///  The tags associated with the control.
        public let tags: [String: String]?
        ///  The steps to follow to determine if the control has been satisfied.
        public let testingInformation: String?

        public init(actionPlanInstructions: String? = nil, actionPlanTitle: String? = nil, controlMappingSources: [CreateControlMappingSource], description: String? = nil, name: String, tags: [String: String]? = nil, testingInformation: String? = nil) {
            self.actionPlanInstructions = actionPlanInstructions
            self.actionPlanTitle = actionPlanTitle
            self.controlMappingSources = controlMappingSources
            self.description = description
            self.name = name
            self.tags = tags
            self.testingInformation = testingInformation
        }

        public func validate(name: String) throws {
            try self.validate(self.actionPlanInstructions, name: "actionPlanInstructions", parent: name, max: 1000)
            try self.validate(self.actionPlanInstructions, name: "actionPlanInstructions", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.actionPlanTitle, name: "actionPlanTitle", parent: name, max: 300)
            try self.validate(self.actionPlanTitle, name: "actionPlanTitle", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.controlMappingSources.forEach {
                try $0.validate(name: "\(name).controlMappingSources[]")
            }
            try self.validate(self.controlMappingSources, name: "controlMappingSources", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.key, name: "tags.key", parent: name, pattern: "^(?!aws:)[a-zA-Z+-=._:/]+$")
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, min: 0)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, pattern: ".{0,255}")
            }
            try self.validate(self.testingInformation, name: "testingInformation", parent: name, max: 1000)
            try self.validate(self.testingInformation, name: "testingInformation", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case actionPlanInstructions
            case actionPlanTitle
            case controlMappingSources
            case description
            case name
            case tags
            case testingInformation
        }
    }

    public struct CreateControlResponse: AWSDecodableShape {
        ///  The new control returned by the CreateControl API.
        public let control: Control?

        public init(control: Control? = nil) {
            self.control = control
        }

        private enum CodingKeys: String, CodingKey {
            case control
        }
    }

    public struct CreateDelegationRequest: AWSEncodableShape & AWSDecodableShape {
        ///  A comment related to the delegation request.
        public let comment: String?
        ///  The unique identifier for the control set.
        public let controlSetId: String?
        ///  The Amazon Resource Name (ARN) of the IAM role.
        public let roleArn: String?
        ///  The type of customer persona.   In CreateAssessment, roleType can only be PROCESS_OWNER.  In UpdateSettings, roleType can only be PROCESS_OWNER. In BatchCreateDelegationByAssessment, roleType can only be RESOURCE_OWNER.
        public let roleType: RoleType?

        public init(comment: String? = nil, controlSetId: String? = nil, roleArn: String? = nil, roleType: RoleType? = nil) {
            self.comment = comment
            self.controlSetId = controlSetId
            self.roleArn = roleArn
            self.roleType = roleType
        }

        public func validate(name: String) throws {
            try self.validate(self.comment, name: "comment", parent: name, max: 350)
            try self.validate(self.comment, name: "comment", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
            try self.validate(self.roleArn, name: "roleArn", parent: name, pattern: "^arn:.*:iam:.*")
        }

        private enum CodingKeys: String, CodingKey {
            case comment
            case controlSetId
            case roleArn
            case roleType
        }
    }

    public struct Delegation: AWSDecodableShape {
        ///  The identifier for the associated assessment.
        public let assessmentId: String?
        ///  The name of the associated assessment.
        public let assessmentName: String?
        ///  The comment related to the delegation.
        public let comment: String?
        ///  The identifier for the associated control set.
        public let controlSetId: String?
        ///  The IAM user or role that created the delegation.
        public let createdBy: String?
        ///  Specifies when the delegation was created.
        public let creationTime: Date?
        ///  The unique identifier for the delegation.
        public let id: String?
        ///  Specifies when the delegation was last updated.
        public let lastUpdated: Date?
        ///  The Amazon Resource Name (ARN) of the IAM role.
        public let roleArn: String?
        ///  The type of customer persona.   In CreateAssessment, roleType can only be PROCESS_OWNER.  In UpdateSettings, roleType can only be PROCESS_OWNER. In BatchCreateDelegationByAssessment, roleType can only be RESOURCE_OWNER.
        public let roleType: RoleType?
        ///  The status of the delegation.
        public let status: DelegationStatus?

        public init(assessmentId: String? = nil, assessmentName: String? = nil, comment: String? = nil, controlSetId: String? = nil, createdBy: String? = nil, creationTime: Date? = nil, id: String? = nil, lastUpdated: Date? = nil, roleArn: String? = nil, roleType: RoleType? = nil, status: DelegationStatus? = nil) {
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.comment = comment
            self.controlSetId = controlSetId
            self.createdBy = createdBy
            self.creationTime = creationTime
            self.id = id
            self.lastUpdated = lastUpdated
            self.roleArn = roleArn
            self.roleType = roleType
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentName
            case comment
            case controlSetId
            case createdBy
            case creationTime
            case id
            case lastUpdated
            case roleArn
            case roleType
            case status
        }
    }

    public struct DelegationMetadata: AWSDecodableShape {
        ///  The unique identifier for the specified assessment.
        public let assessmentId: String?
        ///  The name of the associated assessment.
        public let assessmentName: String?
        ///  Specifies the name of the control set delegated for review.
        public let controlSetName: String?
        ///  Specifies when the delegation was created.
        public let creationTime: Date?
        ///  The unique identifier for the delegation.
        public let id: String?
        ///  The Amazon Resource Name (ARN) of the IAM role.
        public let roleArn: String?
        ///  The current status of the delgation.
        public let status: DelegationStatus?

        public init(assessmentId: String? = nil, assessmentName: String? = nil, controlSetName: String? = nil, creationTime: Date? = nil, id: String? = nil, roleArn: String? = nil, status: DelegationStatus? = nil) {
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.controlSetName = controlSetName
            self.creationTime = creationTime
            self.id = id
            self.roleArn = roleArn
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentName
            case controlSetName
            case creationTime
            case id
            case roleArn
            case status
        }
    }

    public struct DeleteAssessmentFrameworkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "frameworkId", location: .uri(locationName: "frameworkId"))
        ]

        ///  The identifier for the specified framework.
        public let frameworkId: String

        public init(frameworkId: String) {
            self.frameworkId = frameworkId
        }

        public func validate(name: String) throws {
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, max: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, min: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAssessmentFrameworkResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteAssessmentReportRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "assessmentReportId", location: .uri(locationName: "assessmentReportId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The unique identifier for the assessment report.
        public let assessmentReportId: String

        public init(assessmentId: String, assessmentReportId: String) {
            self.assessmentId = assessmentId
            self.assessmentReportId = assessmentReportId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, max: 36)
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, min: 36)
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAssessmentReportResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String

        public init(assessmentId: String) {
            self.assessmentId = assessmentId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAssessmentResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId"))
        ]

        ///  The identifier for the specified control.
        public let controlId: String

        public init(controlId: String) {
            self.controlId = controlId
        }

        public func validate(name: String) throws {
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteControlResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeregisterAccountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct DeregisterAccountResponse: AWSDecodableShape {
        ///  The registration status of the account.
        public let status: AccountStatus?

        public init(status: AccountStatus? = nil) {
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case status
        }
    }

    public struct DeregisterOrganizationAdminAccountRequest: AWSEncodableShape {
        ///  The identifier for the specified administrator account.
        public let adminAccountId: String?

        public init(adminAccountId: String? = nil) {
            self.adminAccountId = adminAccountId
        }

        public func validate(name: String) throws {
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, max: 12)
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, min: 12)
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, pattern: "^[0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case adminAccountId
        }
    }

    public struct DeregisterOrganizationAdminAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateAssessmentReportEvidenceFolderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the folder in which evidence is stored.
        public let evidenceFolderId: String

        public init(assessmentId: String, evidenceFolderId: String) {
            self.assessmentId = assessmentId
            self.evidenceFolderId = evidenceFolderId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolderId
        }
    }

    public struct DisassociateAssessmentReportEvidenceFolderResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Evidence: AWSDecodableShape {
        ///  Specifies whether the evidence is inclded in the assessment report.
        public let assessmentReportSelection: String?
        ///  The names and values used by the evidence event, including an attribute name (such as allowUsersToChangePassword) and value (such as true or false).
        public let attributes: [String: String]?
        ///  The identifier for the specified AWS account.
        public let awsAccountId: String?
        ///  The AWS account from which the evidence is collected, and its AWS organization path.
        public let awsOrganization: String?
        ///  The evaluation status for evidence that falls under the compliance check category. For evidence collected from AWS Security Hub, a Pass or Fail result is shown. For evidence collected from AWS Config, a Compliant or Noncompliant result is shown.
        public let complianceCheck: String?
        ///  The data source from which the specified evidence was collected.
        public let dataSource: String?
        ///  The name of the specified evidence event.
        public let eventName: String?
        ///  The AWS service from which the evidence is collected.
        public let eventSource: String?
        ///  The identifier for the specified AWS account.
        public let evidenceAwsAccountId: String?
        ///  The type of automated evidence.
        public let evidenceByType: String?
        ///  The identifier for the folder in which the evidence is stored.
        public let evidenceFolderId: String?
        ///  The unique identifier for the IAM user or role associated with the evidence.
        public let iamId: String?
        ///  The identifier for the evidence.
        public let id: String?
        ///  The list of resources assessed to generate the evidence.
        public let resourcesIncluded: [Resource]?
        ///  The timestamp that represents when the evidence was collected.
        public let time: Date?

        public init(assessmentReportSelection: String? = nil, attributes: [String: String]? = nil, awsAccountId: String? = nil, awsOrganization: String? = nil, complianceCheck: String? = nil, dataSource: String? = nil, eventName: String? = nil, eventSource: String? = nil, evidenceAwsAccountId: String? = nil, evidenceByType: String? = nil, evidenceFolderId: String? = nil, iamId: String? = nil, id: String? = nil, resourcesIncluded: [Resource]? = nil, time: Date? = nil) {
            self.assessmentReportSelection = assessmentReportSelection
            self.attributes = attributes
            self.awsAccountId = awsAccountId
            self.awsOrganization = awsOrganization
            self.complianceCheck = complianceCheck
            self.dataSource = dataSource
            self.eventName = eventName
            self.eventSource = eventSource
            self.evidenceAwsAccountId = evidenceAwsAccountId
            self.evidenceByType = evidenceByType
            self.evidenceFolderId = evidenceFolderId
            self.iamId = iamId
            self.id = id
            self.resourcesIncluded = resourcesIncluded
            self.time = time
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReportSelection
            case attributes
            case awsAccountId
            case awsOrganization
            case complianceCheck
            case dataSource
            case eventName
            case eventSource
            case evidenceAwsAccountId
            case evidenceByType
            case evidenceFolderId
            case iamId
            case id
            case resourcesIncluded
            case time
        }
    }

    public struct Framework: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the specified framework.
        public let arn: String?
        ///  The compliance type that the new custom framework supports, such as CIS or HIPAA.
        public let complianceType: String?
        ///  The control sets associated with the framework.
        public let controlSets: [ControlSet]?
        ///  The sources from which AWS Audit Manager collects evidence for the control.
        public let controlSources: String?
        ///  Specifies when the framework was created.
        public let createdAt: Date?
        ///  The IAM user or role that created the framework.
        public let createdBy: String?
        ///  The description of the specified framework.
        public let description: String?
        ///  The unique identifier for the specified framework.
        public let id: String?
        ///  Specifies when the framework was most recently updated.
        public let lastUpdatedAt: Date?
        ///  The IAM user or role that most recently updated the framework.
        public let lastUpdatedBy: String?
        ///  The logo associated with the framework.
        public let logo: String?
        ///  The name of the specified framework.
        public let name: String?
        ///  The tags associated with the framework.
        public let tags: [String: String]?
        ///  The framework type, such as custom or standard.
        public let type: FrameworkType?

        public init(arn: String? = nil, complianceType: String? = nil, controlSets: [ControlSet]? = nil, controlSources: String? = nil, createdAt: Date? = nil, createdBy: String? = nil, description: String? = nil, id: String? = nil, lastUpdatedAt: Date? = nil, lastUpdatedBy: String? = nil, logo: String? = nil, name: String? = nil, tags: [String: String]? = nil, type: FrameworkType? = nil) {
            self.arn = arn
            self.complianceType = complianceType
            self.controlSets = controlSets
            self.controlSources = controlSources
            self.createdAt = createdAt
            self.createdBy = createdBy
            self.description = description
            self.id = id
            self.lastUpdatedAt = lastUpdatedAt
            self.lastUpdatedBy = lastUpdatedBy
            self.logo = logo
            self.name = name
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case complianceType
            case controlSets
            case controlSources
            case createdAt
            case createdBy
            case description
            case id
            case lastUpdatedAt
            case lastUpdatedBy
            case logo
            case name
            case tags
            case type
        }
    }

    public struct FrameworkMetadata: AWSDecodableShape {
        ///  The compliance standard associated with the framework, such as PCI-DSS or HIPAA.
        public let complianceType: String?
        ///  The description of the framework.
        public let description: String?
        ///  The logo associated with the framework.
        public let logo: String?
        ///  The name of the framework.
        public let name: String?

        public init(complianceType: String? = nil, description: String? = nil, logo: String? = nil, name: String? = nil) {
            self.complianceType = complianceType
            self.description = description
            self.logo = logo
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case complianceType
            case description
            case logo
            case name
        }
    }

    public struct GetAccountStatusRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetAccountStatusResponse: AWSDecodableShape {
        ///  The status of the specified AWS account.
        public let status: AccountStatus?

        public init(status: AccountStatus? = nil) {
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case status
        }
    }

    public struct GetAssessmentFrameworkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "frameworkId", location: .uri(locationName: "frameworkId"))
        ]

        ///  The identifier for the specified framework.
        public let frameworkId: String

        public init(frameworkId: String) {
            self.frameworkId = frameworkId
        }

        public func validate(name: String) throws {
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, max: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, min: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAssessmentFrameworkResponse: AWSDecodableShape {
        ///  The framework returned by the GetAssessmentFramework API.
        public let framework: Framework?

        public init(framework: Framework? = nil) {
            self.framework = framework
        }

        private enum CodingKeys: String, CodingKey {
            case framework
        }
    }

    public struct GetAssessmentReportUrlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "assessmentReportId", location: .uri(locationName: "assessmentReportId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the assessment report.
        public let assessmentReportId: String

        public init(assessmentId: String, assessmentReportId: String) {
            self.assessmentId = assessmentId
            self.assessmentReportId = assessmentReportId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, max: 36)
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, min: 36)
            try self.validate(self.assessmentReportId, name: "assessmentReportId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAssessmentReportUrlResponse: AWSDecodableShape {
        public let preSignedUrl: URL?

        public init(preSignedUrl: URL? = nil) {
            self.preSignedUrl = preSignedUrl
        }

        private enum CodingKeys: String, CodingKey {
            case preSignedUrl
        }
    }

    public struct GetAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String

        public init(assessmentId: String) {
            self.assessmentId = assessmentId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAssessmentResponse: AWSDecodableShape {
        public let assessment: Assessment?

        public init(assessment: Assessment? = nil) {
            self.assessment = assessment
        }

        private enum CodingKeys: String, CodingKey {
            case assessment
        }
    }

    public struct GetChangeLogsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlId", location: .querystring(locationName: "controlId")),
            AWSMemberEncoding(label: "controlSetId", location: .querystring(locationName: "controlSetId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the specified control.
        public let controlId: String?
        ///  The identifier for the specified control set.
        public let controlSetId: String?
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentId: String, controlId: String? = nil, controlSetId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.assessmentId = assessmentId
            self.controlId = controlId
            self.controlSetId = controlSetId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetChangeLogsResponse: AWSDecodableShape {
        ///  The list of user activity for the control.
        public let changeLogs: [ChangeLog]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(changeLogs: [ChangeLog]? = nil, nextToken: String? = nil) {
            self.changeLogs = changeLogs
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case changeLogs
            case nextToken
        }
    }

    public struct GetControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId"))
        ]

        ///  The identifier for the specified control.
        public let controlId: String

        public init(controlId: String) {
            self.controlId = controlId
        }

        public func validate(name: String) throws {
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetControlResponse: AWSDecodableShape {
        ///  The name of the control returned by the GetControl API.
        public let control: Control?

        public init(control: Control? = nil) {
            self.control = control
        }

        private enum CodingKeys: String, CodingKey {
            case control
        }
    }

    public struct GetDelegationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDelegationsResponse: AWSDecodableShape {
        ///  The list of delegations returned by the GetDelegations API.
        public let delegations: [DelegationMetadata]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(delegations: [DelegationMetadata]? = nil, nextToken: String? = nil) {
            self.delegations = delegations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case delegations
            case nextToken
        }
    }

    public struct GetEvidenceByEvidenceFolderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId")),
            AWSMemberEncoding(label: "evidenceFolderId", location: .uri(locationName: "evidenceFolderId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the control set.
        public let controlSetId: String
        ///  The unique identifier for the folder in which the evidence is stored.
        public let evidenceFolderId: String
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentId: String, controlSetId: String, evidenceFolderId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.assessmentId = assessmentId
            self.controlSetId = controlSetId
            self.evidenceFolderId = evidenceFolderId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEvidenceByEvidenceFolderResponse: AWSDecodableShape {
        ///  The list of evidence returned by the GetEvidenceByEvidenceFolder API.
        public let evidence: [Evidence]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(evidence: [Evidence]? = nil, nextToken: String? = nil) {
            self.evidence = evidence
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case evidence
            case nextToken
        }
    }

    public struct GetEvidenceFolderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId")),
            AWSMemberEncoding(label: "evidenceFolderId", location: .uri(locationName: "evidenceFolderId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  The identifier for the folder in which the evidence is stored.
        public let evidenceFolderId: String

        public init(assessmentId: String, controlSetId: String, evidenceFolderId: String) {
            self.assessmentId = assessmentId
            self.controlSetId = controlSetId
            self.evidenceFolderId = evidenceFolderId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEvidenceFolderResponse: AWSDecodableShape {
        ///  The folder in which evidence is stored.
        public let evidenceFolder: AssessmentEvidenceFolder?

        public init(evidenceFolder: AssessmentEvidenceFolder? = nil) {
            self.evidenceFolder = evidenceFolder
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolder
        }
    }

    public struct GetEvidenceFoldersByAssessmentControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the specified control.
        public let controlId: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentId: String, controlId: String, controlSetId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.assessmentId = assessmentId
            self.controlId = controlId
            self.controlSetId = controlSetId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEvidenceFoldersByAssessmentControlResponse: AWSDecodableShape {
        ///  The list of evidence folders returned by the GetEvidenceFoldersByAssessmentControl API.
        public let evidenceFolders: [AssessmentEvidenceFolder]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(evidenceFolders: [AssessmentEvidenceFolder]? = nil, nextToken: String? = nil) {
            self.evidenceFolders = evidenceFolders
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolders
            case nextToken
        }
    }

    public struct GetEvidenceFoldersByAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.assessmentId = assessmentId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEvidenceFoldersByAssessmentResponse: AWSDecodableShape {
        ///  The list of evidence folders returned by the GetEvidenceFoldersByAssessment API.
        public let evidenceFolders: [AssessmentEvidenceFolder]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(evidenceFolders: [AssessmentEvidenceFolder]? = nil, nextToken: String? = nil) {
            self.evidenceFolders = evidenceFolders
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case evidenceFolders
            case nextToken
        }
    }

    public struct GetEvidenceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId")),
            AWSMemberEncoding(label: "evidenceFolderId", location: .uri(locationName: "evidenceFolderId")),
            AWSMemberEncoding(label: "evidenceId", location: .uri(locationName: "evidenceId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  The identifier for the folder in which the evidence is stored.
        public let evidenceFolderId: String
        ///  The identifier for the evidence.
        public let evidenceId: String

        public init(assessmentId: String, controlSetId: String, evidenceFolderId: String, evidenceId: String) {
            self.assessmentId = assessmentId
            self.controlSetId = controlSetId
            self.evidenceFolderId = evidenceFolderId
            self.evidenceId = evidenceId
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, max: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, min: 36)
            try self.validate(self.evidenceFolderId, name: "evidenceFolderId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.evidenceId, name: "evidenceId", parent: name, max: 36)
            try self.validate(self.evidenceId, name: "evidenceId", parent: name, min: 36)
            try self.validate(self.evidenceId, name: "evidenceId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEvidenceResponse: AWSDecodableShape {
        ///  The evidence returned by the GetEvidenceResponse API.
        public let evidence: Evidence?

        public init(evidence: Evidence? = nil) {
            self.evidence = evidence
        }

        private enum CodingKeys: String, CodingKey {
            case evidence
        }
    }

    public struct GetOrganizationAdminAccountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetOrganizationAdminAccountResponse: AWSDecodableShape {
        ///  The identifier for the specified administrator account.
        public let adminAccountId: String?
        ///  The identifier for the specified organization.
        public let organizationId: String?

        public init(adminAccountId: String? = nil, organizationId: String? = nil) {
            self.adminAccountId = adminAccountId
            self.organizationId = organizationId
        }

        private enum CodingKeys: String, CodingKey {
            case adminAccountId
            case organizationId
        }
    }

    public struct GetServicesInScopeRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetServicesInScopeResponse: AWSDecodableShape {
        ///  The metadata associated with the aAWS service.
        public let serviceMetadata: [ServiceMetadata]?

        public init(serviceMetadata: [ServiceMetadata]? = nil) {
            self.serviceMetadata = serviceMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case serviceMetadata
        }
    }

    public struct GetSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attribute", location: .uri(locationName: "attribute"))
        ]

        ///  The list of SettingAttribute enum values.
        public let attribute: SettingAttribute

        public init(attribute: SettingAttribute) {
            self.attribute = attribute
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSettingsResponse: AWSDecodableShape {
        ///  The settings object that holds all supported AWS Audit Manager settings.
        public let settings: Settings?

        public init(settings: Settings? = nil) {
            self.settings = settings
        }

        private enum CodingKeys: String, CodingKey {
            case settings
        }
    }

    public struct ListAssessmentFrameworksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "frameworkType", location: .querystring(locationName: "frameworkType")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The type of framework, such as standard or custom.
        public let frameworkType: FrameworkType
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(frameworkType: FrameworkType, maxResults: Int? = nil, nextToken: String? = nil) {
            self.frameworkType = frameworkType
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAssessmentFrameworksResponse: AWSDecodableShape {
        ///  The list of metadata objects for the specified framework.
        public let frameworkMetadataList: [AssessmentFrameworkMetadata]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(frameworkMetadataList: [AssessmentFrameworkMetadata]? = nil, nextToken: String? = nil) {
            self.frameworkMetadataList = frameworkMetadataList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case frameworkMetadataList
            case nextToken
        }
    }

    public struct ListAssessmentReportsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAssessmentReportsResponse: AWSDecodableShape {
        ///  The list of assessment reports returned by the ListAssessmentReports API.
        public let assessmentReports: [AssessmentReportMetadata]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentReports: [AssessmentReportMetadata]? = nil, nextToken: String? = nil) {
            self.assessmentReports = assessmentReports
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentReports
            case nextToken
        }
    }

    public struct ListAssessmentsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAssessmentsResponse: AWSDecodableShape {
        ///  The metadata associated with the assessment.
        public let assessmentMetadata: [AssessmentMetadataItem]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(assessmentMetadata: [AssessmentMetadataItem]? = nil, nextToken: String? = nil) {
            self.assessmentMetadata = assessmentMetadata
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentMetadata
            case nextToken
        }
    }

    public struct ListControlsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "controlType", location: .querystring(locationName: "controlType")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  The type of control, such as standard or custom.
        public let controlType: ControlType
        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(controlType: ControlType, maxResults: Int? = nil, nextToken: String? = nil) {
            self.controlType = controlType
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListControlsResponse: AWSDecodableShape {
        ///  The list of control metadata objects returned by the ListControls API.
        public let controlMetadataList: [ControlMetadata]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(controlMetadataList: [ControlMetadata]? = nil, nextToken: String? = nil) {
            self.controlMetadataList = controlMetadataList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case controlMetadataList
            case nextToken
        }
    }

    public struct ListKeywordsForDataSourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "source", location: .querystring(locationName: "source"))
        ]

        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?
        ///  The control mapping data source to which the keywords apply.
        public let source: SourceType

        public init(maxResults: Int? = nil, nextToken: String? = nil, source: SourceType) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.source = source
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListKeywordsForDataSourceResponse: AWSDecodableShape {
        ///  The list of keywords for the specified event mapping source.
        public let keywords: [String]?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(keywords: [String]? = nil, nextToken: String? = nil) {
            self.keywords = keywords
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case keywords
            case nextToken
        }
    }

    public struct ListNotificationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        ///  Represents the maximum number of results per page, or per API request call.
        public let maxResults: Int?
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 1000)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "^[A-Za-z0-9+\\/=]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListNotificationsResponse: AWSDecodableShape {
        ///  The pagination token used to fetch the next set of results.
        public let nextToken: String?
        ///  The returned list of notifications.
        public let notifications: [Notification]?

        public init(nextToken: String? = nil, notifications: [Notification]? = nil) {
            self.nextToken = nextToken
            self.notifications = notifications
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken
            case notifications
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn"))
        ]

        ///  The Amazon Resource Name (ARN) of the specified resource.
        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:.*:auditmanager:.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        ///  The list of tags returned by the ListTagsForResource API.
        public let tags: [String: String]?

        public init(tags: [String: String]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct ManualEvidence: AWSEncodableShape & AWSDecodableShape {
        ///  The Amazon S3 URL that points to a manual evidence object.
        public let s3ResourcePath: String?

        public init(s3ResourcePath: String? = nil) {
            self.s3ResourcePath = s3ResourcePath
        }

        public func validate(name: String) throws {
            try self.validate(self.s3ResourcePath, name: "s3ResourcePath", parent: name, max: 1024)
            try self.validate(self.s3ResourcePath, name: "s3ResourcePath", parent: name, min: 1)
            try self.validate(self.s3ResourcePath, name: "s3ResourcePath", parent: name, pattern: "^(S|s)3:\\/\\/[a-zA-Z0-9-_\\/.]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case s3ResourcePath
        }
    }

    public struct Notification: AWSDecodableShape {
        ///  The identifier for the specified assessment.
        public let assessmentId: String?
        ///  The name of the related assessment.
        public let assessmentName: String?
        ///  The identifier for the specified control set.
        public let controlSetId: String?
        ///  Specifies the name of the control set that the notification is about.
        public let controlSetName: String?
        ///  The description of the notification.
        public let description: String?
        ///  The time when the notification was sent.
        public let eventTime: Date?
        ///  The unique identifier for the notification.
        public let id: String?
        ///  The sender of the notification.
        public let source: String?

        public init(assessmentId: String? = nil, assessmentName: String? = nil, controlSetId: String? = nil, controlSetName: String? = nil, description: String? = nil, eventTime: Date? = nil, id: String? = nil, source: String? = nil) {
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.controlSetId = controlSetId
            self.controlSetName = controlSetName
            self.description = description
            self.eventTime = eventTime
            self.id = id
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentId
            case assessmentName
            case controlSetId
            case controlSetName
            case description
            case eventTime
            case id
            case source
        }
    }

    public struct RegisterAccountRequest: AWSEncodableShape {
        ///  The delegated administrator account for AWS Audit Manager.
        public let delegatedAdminAccount: String?
        ///  The AWS KMS key details.
        public let kmsKey: String?

        public init(delegatedAdminAccount: String? = nil, kmsKey: String? = nil) {
            self.delegatedAdminAccount = delegatedAdminAccount
            self.kmsKey = kmsKey
        }

        public func validate(name: String) throws {
            try self.validate(self.delegatedAdminAccount, name: "delegatedAdminAccount", parent: name, max: 12)
            try self.validate(self.delegatedAdminAccount, name: "delegatedAdminAccount", parent: name, min: 12)
            try self.validate(self.delegatedAdminAccount, name: "delegatedAdminAccount", parent: name, pattern: "^[0-9]{12}$")
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, max: 2048)
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, min: 7)
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, pattern: "^arn:.*:kms:.*|DEFAULT")
        }

        private enum CodingKeys: String, CodingKey {
            case delegatedAdminAccount
            case kmsKey
        }
    }

    public struct RegisterAccountResponse: AWSDecodableShape {
        ///  The status of the account registration request.
        public let status: AccountStatus?

        public init(status: AccountStatus? = nil) {
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case status
        }
    }

    public struct RegisterOrganizationAdminAccountRequest: AWSEncodableShape {
        ///  The identifier for the specified delegated administrator account.
        public let adminAccountId: String

        public init(adminAccountId: String) {
            self.adminAccountId = adminAccountId
        }

        public func validate(name: String) throws {
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, max: 12)
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, min: 12)
            try self.validate(self.adminAccountId, name: "adminAccountId", parent: name, pattern: "^[0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case adminAccountId
        }
    }

    public struct RegisterOrganizationAdminAccountResponse: AWSDecodableShape {
        ///  The identifier for the specified delegated administrator account.
        public let adminAccountId: String?
        ///  The identifier for the specified AWS organization.
        public let organizationId: String?

        public init(adminAccountId: String? = nil, organizationId: String? = nil) {
            self.adminAccountId = adminAccountId
            self.organizationId = organizationId
        }

        private enum CodingKeys: String, CodingKey {
            case adminAccountId
            case organizationId
        }
    }

    public struct Resource: AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) for the specified resource.
        public let arn: String?
        ///  The value of the specified resource.
        public let value: String?

        public init(arn: String? = nil, value: String? = nil) {
            self.arn = arn
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case arn
            case value
        }
    }

    public struct Role: AWSEncodableShape & AWSDecodableShape {
        ///  The Amazon Resource Name (ARN) of the IAM role.
        public let roleArn: String?
        ///  The type of customer persona.   In CreateAssessment, roleType can only be PROCESS_OWNER.  In UpdateSettings, roleType can only be PROCESS_OWNER. In BatchCreateDelegationByAssessment, roleType can only be RESOURCE_OWNER.
        public let roleType: RoleType?

        public init(roleArn: String? = nil, roleType: RoleType? = nil) {
            self.roleArn = roleArn
            self.roleType = roleType
        }

        public func validate(name: String) throws {
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
            try self.validate(self.roleArn, name: "roleArn", parent: name, pattern: "^arn:.*:iam:.*")
        }

        private enum CodingKeys: String, CodingKey {
            case roleArn
            case roleType
        }
    }

    public struct Scope: AWSEncodableShape & AWSDecodableShape {
        ///  The AWS accounts included in the scope of the assessment.
        public let awsAccounts: [AWSAccount]?
        ///  The AWS services included in the scope of the assessment.
        public let awsServices: [AWSService]?

        public init(awsAccounts: [AWSAccount]? = nil, awsServices: [AWSService]? = nil) {
            self.awsAccounts = awsAccounts
            self.awsServices = awsServices
        }

        public func validate(name: String) throws {
            try self.awsAccounts?.forEach {
                try $0.validate(name: "\(name).awsAccounts[]")
            }
            try self.awsServices?.forEach {
                try $0.validate(name: "\(name).awsServices[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case awsAccounts
            case awsServices
        }
    }

    public struct ServiceMetadata: AWSDecodableShape {
        ///  The category in which the AWS service belongs, such as compute, storage, database, and so on.
        public let category: String?
        ///  The description of the specified AWS service.
        public let description: String?
        ///  The display name of the AWS service.
        public let displayName: String?
        ///  The name of the AWS service.
        public let name: String?

        public init(category: String? = nil, description: String? = nil, displayName: String? = nil, name: String? = nil) {
            self.category = category
            self.description = description
            self.displayName = displayName
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case category
            case description
            case displayName
            case name
        }
    }

    public struct Settings: AWSDecodableShape {
        ///  The default storage destination for assessment reports.
        public let defaultAssessmentReportsDestination: AssessmentReportsDestination?
        ///  The designated default audit owners.
        public let defaultProcessOwners: [Role]?
        ///  Specifies whether AWS Organizations is enabled.
        public let isAwsOrgEnabled: Bool?
        ///  The AWS KMS key details.
        public let kmsKey: String?
        ///  The designated Amazon Simple Notification Service (Amazon SNS) topic.
        public let snsTopic: String?

        public init(defaultAssessmentReportsDestination: AssessmentReportsDestination? = nil, defaultProcessOwners: [Role]? = nil, isAwsOrgEnabled: Bool? = nil, kmsKey: String? = nil, snsTopic: String? = nil) {
            self.defaultAssessmentReportsDestination = defaultAssessmentReportsDestination
            self.defaultProcessOwners = defaultProcessOwners
            self.isAwsOrgEnabled = isAwsOrgEnabled
            self.kmsKey = kmsKey
            self.snsTopic = snsTopic
        }

        private enum CodingKeys: String, CodingKey {
            case defaultAssessmentReportsDestination
            case defaultProcessOwners
            case isAwsOrgEnabled
            case kmsKey
            case snsTopic
        }
    }

    public struct SourceKeyword: AWSEncodableShape & AWSDecodableShape {
        ///  The method of input for the specified keyword.
        public let keywordInputType: KeywordInputType?
        ///  The value of the keyword used to search AWS CloudTrail logs when mapping a control data source.
        public let keywordValue: String?

        public init(keywordInputType: KeywordInputType? = nil, keywordValue: String? = nil) {
            self.keywordInputType = keywordInputType
            self.keywordValue = keywordValue
        }

        public func validate(name: String) throws {
            try self.validate(self.keywordValue, name: "keywordValue", parent: name, max: 100)
            try self.validate(self.keywordValue, name: "keywordValue", parent: name, min: 1)
            try self.validate(self.keywordValue, name: "keywordValue", parent: name, pattern: "^[a-zA-Z_0-9-\\s().]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case keywordInputType
            case keywordValue
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn"))
        ]

        ///  The Amazon Resource Name (ARN) of the specified resource.
        public let resourceArn: String
        ///  The tags to be associated with the resource.
        public let tags: [String: String]

        public init(resourceArn: String, tags: [String: String]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:.*:auditmanager:.*")
            try self.tags.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.key, name: "tags.key", parent: name, pattern: "^(?!aws:)[a-zA-Z+-=._:/]+$")
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, min: 0)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, pattern: ".{0,255}")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct TagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct URL: AWSDecodableShape {
        ///  The name or word used as a hyperlink to the URL.
        public let hyperlinkName: String?
        ///  The unique identifier for the internet resource.
        public let link: String?

        public init(hyperlinkName: String? = nil, link: String? = nil) {
            self.hyperlinkName = hyperlinkName
            self.link = link
        }

        private enum CodingKeys: String, CodingKey {
            case hyperlinkName
            case link
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        ///  The Amazon Resource Name (ARN) of the specified resource.
        public let resourceArn: String
        ///  The name or key of the tag.
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:.*:auditmanager:.*")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
                try validate($0, name: "tagKeys[]", parent: name, pattern: "^(?!aws:)[a-zA-Z+-=._:/]+$")
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 50)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UntagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateAssessmentControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The comment body text for the specified control.
        public let commentBody: String?
        ///  The identifier for the specified control.
        public let controlId: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  The status of the specified control.
        public let controlStatus: ControlStatus?

        public init(assessmentId: String, commentBody: String? = nil, controlId: String, controlSetId: String, controlStatus: ControlStatus? = nil) {
            self.assessmentId = assessmentId
            self.commentBody = commentBody
            self.controlId = controlId
            self.controlSetId = controlSetId
            self.controlStatus = controlStatus
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.commentBody, name: "commentBody", parent: name, max: 500)
            try self.validate(self.commentBody, name: "commentBody", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 300)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 1)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case commentBody
            case controlStatus
        }
    }

    public struct UpdateAssessmentControlResponse: AWSDecodableShape {
        ///  The name of the updated control set returned by the UpdateAssessmentControl API.
        public let control: AssessmentControl?

        public init(control: AssessmentControl? = nil) {
            self.control = control
        }

        private enum CodingKeys: String, CodingKey {
            case control
        }
    }

    public struct UpdateAssessmentControlSetStatusRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId")),
            AWSMemberEncoding(label: "controlSetId", location: .uri(locationName: "controlSetId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The comment related to the status update.
        public let comment: String
        ///  The identifier for the specified control set.
        public let controlSetId: String
        ///  The status of the control set that is being updated.
        public let status: ControlSetStatus

        public init(assessmentId: String, comment: String, controlSetId: String, status: ControlSetStatus) {
            self.assessmentId = assessmentId
            self.comment = comment
            self.controlSetId = controlSetId
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.comment, name: "comment", parent: name, max: 350)
            try self.validate(self.comment, name: "comment", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, max: 2048)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, min: 0)
            try self.validate(self.controlSetId, name: "controlSetId", parent: name, pattern: ".*")
        }

        private enum CodingKeys: String, CodingKey {
            case comment
            case status
        }
    }

    public struct UpdateAssessmentControlSetStatusResponse: AWSDecodableShape {
        ///  The name of the updated control set returned by the UpdateAssessmentControlSetStatus API.
        public let controlSet: AssessmentControlSet?

        public init(controlSet: AssessmentControlSet? = nil) {
            self.controlSet = controlSet
        }

        private enum CodingKeys: String, CodingKey {
            case controlSet
        }
    }

    public struct UpdateAssessmentFrameworkControlSet: AWSEncodableShape {
        ///  The list of controls contained within the control set.
        public let controls: [CreateAssessmentFrameworkControl]?
        ///  The unique identifier for the control set.
        public let id: String?
        ///  The name of the control set.
        public let name: String?

        public init(controls: [CreateAssessmentFrameworkControl]? = nil, id: String? = nil, name: String? = nil) {
            self.controls = controls
            self.id = id
            self.name = name
        }

        public func validate(name: String) throws {
            try self.controls?.forEach {
                try $0.validate(name: "\(name).controls[]")
            }
            try self.validate(self.controls, name: "controls", parent: name, min: 1)
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, min: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\_]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case controls
            case id
            case name
        }
    }

    public struct UpdateAssessmentFrameworkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "frameworkId", location: .uri(locationName: "frameworkId"))
        ]

        ///  The compliance type that the new custom framework supports, such as CIS or HIPAA.
        public let complianceType: String?
        ///  The control sets associated with the framework.
        public let controlSets: [UpdateAssessmentFrameworkControlSet]
        ///  The description of the framework that is to be updated.
        public let description: String?
        ///  The identifier for the specified framework.
        public let frameworkId: String
        ///  The name of the framework to be updated.
        public let name: String

        public init(complianceType: String? = nil, controlSets: [UpdateAssessmentFrameworkControlSet], description: String? = nil, frameworkId: String, name: String) {
            self.complianceType = complianceType
            self.controlSets = controlSets
            self.description = description
            self.frameworkId = frameworkId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.complianceType, name: "complianceType", parent: name, max: 100)
            try self.validate(self.complianceType, name: "complianceType", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.controlSets.forEach {
                try $0.validate(name: "\(name).controlSets[]")
            }
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, max: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, min: 36)
            try self.validate(self.frameworkId, name: "frameworkId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case complianceType
            case controlSets
            case description
            case name
        }
    }

    public struct UpdateAssessmentFrameworkResponse: AWSDecodableShape {
        ///  The name of the specified framework.
        public let framework: Framework?

        public init(framework: Framework? = nil) {
            self.framework = framework
        }

        private enum CodingKeys: String, CodingKey {
            case framework
        }
    }

    public struct UpdateAssessmentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The description of the specified assessment.
        public let assessmentDescription: String?
        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The name of the specified assessment to be updated.
        public let assessmentName: String?
        ///  The assessment report storage destination for the specified assessment that is being updated.
        public let assessmentReportsDestination: AssessmentReportsDestination?
        ///  The list of roles for the specified assessment.
        public let roles: [Role]?
        ///  The scope of the specified assessment.
        public let scope: Scope

        public init(assessmentDescription: String? = nil, assessmentId: String, assessmentName: String? = nil, assessmentReportsDestination: AssessmentReportsDestination? = nil, roles: [Role]? = nil, scope: Scope) {
            self.assessmentDescription = assessmentDescription
            self.assessmentId = assessmentId
            self.assessmentName = assessmentName
            self.assessmentReportsDestination = assessmentReportsDestination
            self.roles = roles
            self.scope = scope
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentDescription, name: "assessmentDescription", parent: name, max: 1000)
            try self.validate(self.assessmentDescription, name: "assessmentDescription", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.assessmentName, name: "assessmentName", parent: name, max: 300)
            try self.validate(self.assessmentName, name: "assessmentName", parent: name, min: 1)
            try self.validate(self.assessmentName, name: "assessmentName", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.assessmentReportsDestination?.validate(name: "\(name).assessmentReportsDestination")
            try self.roles?.forEach {
                try $0.validate(name: "\(name).roles[]")
            }
            try self.scope.validate(name: "\(name).scope")
        }

        private enum CodingKeys: String, CodingKey {
            case assessmentDescription
            case assessmentName
            case assessmentReportsDestination
            case roles
            case scope
        }
    }

    public struct UpdateAssessmentResponse: AWSDecodableShape {
        ///  The response object (name of the updated assessment) for the UpdateAssessmentRequest API.
        public let assessment: Assessment?

        public init(assessment: Assessment? = nil) {
            self.assessment = assessment
        }

        private enum CodingKeys: String, CodingKey {
            case assessment
        }
    }

    public struct UpdateAssessmentStatusRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "assessmentId", location: .uri(locationName: "assessmentId"))
        ]

        ///  The identifier for the specified assessment.
        public let assessmentId: String
        ///  The current status of the specified assessment.
        public let status: AssessmentStatus

        public init(assessmentId: String, status: AssessmentStatus) {
            self.assessmentId = assessmentId
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, max: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, min: 36)
            try self.validate(self.assessmentId, name: "assessmentId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case status
        }
    }

    public struct UpdateAssessmentStatusResponse: AWSDecodableShape {
        ///  The name of the updated assessment returned by the UpdateAssessmentStatus API.
        public let assessment: Assessment?

        public init(assessment: Assessment? = nil) {
            self.assessment = assessment
        }

        private enum CodingKeys: String, CodingKey {
            case assessment
        }
    }

    public struct UpdateControlRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "controlId", location: .uri(locationName: "controlId"))
        ]

        ///  The recommended actions to carry out if the control is not fulfilled.
        public let actionPlanInstructions: String?
        ///  The title of the action plan for remediating the control.
        public let actionPlanTitle: String?
        ///  The identifier for the specified control.
        public let controlId: String
        ///  The data mapping sources for the specified control.
        public let controlMappingSources: [ControlMappingSource]
        ///  The optional description of the control.
        public let description: String?
        ///  The name of the control to be updated.
        public let name: String
        ///  The steps that to follow to determine if the control has been satisfied.
        public let testingInformation: String?

        public init(actionPlanInstructions: String? = nil, actionPlanTitle: String? = nil, controlId: String, controlMappingSources: [ControlMappingSource], description: String? = nil, name: String, testingInformation: String? = nil) {
            self.actionPlanInstructions = actionPlanInstructions
            self.actionPlanTitle = actionPlanTitle
            self.controlId = controlId
            self.controlMappingSources = controlMappingSources
            self.description = description
            self.name = name
            self.testingInformation = testingInformation
        }

        public func validate(name: String) throws {
            try self.validate(self.actionPlanInstructions, name: "actionPlanInstructions", parent: name, max: 1000)
            try self.validate(self.actionPlanInstructions, name: "actionPlanInstructions", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.actionPlanTitle, name: "actionPlanTitle", parent: name, max: 300)
            try self.validate(self.actionPlanTitle, name: "actionPlanTitle", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.controlId, name: "controlId", parent: name, max: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, min: 36)
            try self.validate(self.controlId, name: "controlId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.controlMappingSources.forEach {
                try $0.validate(name: "\(name).controlMappingSources[]")
            }
            try self.validate(self.controlMappingSources, name: "controlMappingSources", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, max: 1000)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.name, name: "name", parent: name, max: 300)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
            try self.validate(self.testingInformation, name: "testingInformation", parent: name, max: 1000)
            try self.validate(self.testingInformation, name: "testingInformation", parent: name, pattern: "^[\\w\\W\\s\\S]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case actionPlanInstructions
            case actionPlanTitle
            case controlMappingSources
            case description
            case name
            case testingInformation
        }
    }

    public struct UpdateControlResponse: AWSDecodableShape {
        ///  The name of the updated control set returned by the UpdateControl API.
        public let control: Control?

        public init(control: Control? = nil) {
            self.control = control
        }

        private enum CodingKeys: String, CodingKey {
            case control
        }
    }

    public struct UpdateSettingsRequest: AWSEncodableShape {
        ///  The default storage destination for assessment reports.
        public let defaultAssessmentReportsDestination: AssessmentReportsDestination?
        ///  A list of the default audit owners.
        public let defaultProcessOwners: [Role]?
        ///  The AWS KMS key details.
        public let kmsKey: String?
        ///  The Amazon Simple Notification Service (Amazon SNS) topic to which AWS Audit Manager sends notifications.
        public let snsTopic: String?

        public init(defaultAssessmentReportsDestination: AssessmentReportsDestination? = nil, defaultProcessOwners: [Role]? = nil, kmsKey: String? = nil, snsTopic: String? = nil) {
            self.defaultAssessmentReportsDestination = defaultAssessmentReportsDestination
            self.defaultProcessOwners = defaultProcessOwners
            self.kmsKey = kmsKey
            self.snsTopic = snsTopic
        }

        public func validate(name: String) throws {
            try self.defaultAssessmentReportsDestination?.validate(name: "\(name).defaultAssessmentReportsDestination")
            try self.defaultProcessOwners?.forEach {
                try $0.validate(name: "\(name).defaultProcessOwners[]")
            }
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, max: 2048)
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, min: 7)
            try self.validate(self.kmsKey, name: "kmsKey", parent: name, pattern: "^arn:.*:kms:.*|DEFAULT")
            try self.validate(self.snsTopic, name: "snsTopic", parent: name, max: 2048)
            try self.validate(self.snsTopic, name: "snsTopic", parent: name, min: 20)
            try self.validate(self.snsTopic, name: "snsTopic", parent: name, pattern: "^arn:.*:sns:.*")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultAssessmentReportsDestination
            case defaultProcessOwners
            case kmsKey
            case snsTopic
        }
    }

    public struct UpdateSettingsResponse: AWSDecodableShape {
        ///  The current list of settings.
        public let settings: Settings?

        public init(settings: Settings? = nil) {
            self.settings = settings
        }

        private enum CodingKeys: String, CodingKey {
            case settings
        }
    }

    public struct ValidateAssessmentReportIntegrityRequest: AWSEncodableShape {
        ///  The relative path of the specified Amazon S3 bucket in which the assessment report is stored.
        public let s3RelativePath: String

        public init(s3RelativePath: String) {
            self.s3RelativePath = s3RelativePath
        }

        public func validate(name: String) throws {
            try self.validate(self.s3RelativePath, name: "s3RelativePath", parent: name, max: 1024)
            try self.validate(self.s3RelativePath, name: "s3RelativePath", parent: name, min: 1)
            try self.validate(self.s3RelativePath, name: "s3RelativePath", parent: name, pattern: "^(S|s)3:\\/\\/[a-zA-Z0-9-_\\/.]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case s3RelativePath
        }
    }

    public struct ValidateAssessmentReportIntegrityResponse: AWSDecodableShape {
        ///  The signature algorithm used to code sign the assessment report file.
        public let signatureAlgorithm: String?
        ///  The date and time signature that specifies when the assessment report was created.
        public let signatureDateTime: String?
        ///  The unique identifier for the validation signature key.
        public let signatureKeyId: String?
        ///  Specifies whether the signature key is valid.
        public let signatureValid: Bool?
        ///  Represents any errors that occurred when validating the assessment report.
        public let validationErrors: [String]?

        public init(signatureAlgorithm: String? = nil, signatureDateTime: String? = nil, signatureKeyId: String? = nil, signatureValid: Bool? = nil, validationErrors: [String]? = nil) {
            self.signatureAlgorithm = signatureAlgorithm
            self.signatureDateTime = signatureDateTime
            self.signatureKeyId = signatureKeyId
            self.signatureValid = signatureValid
            self.validationErrors = validationErrors
        }

        private enum CodingKeys: String, CodingKey {
            case signatureAlgorithm
            case signatureDateTime
            case signatureKeyId
            case signatureValid
            case validationErrors
        }
    }
}
